<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('external_experiences', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

            // 关联员工
            $table->unsignedBigInteger('employee_id');

            // 公司信息
            $table->string('company_name', 200); // 公司名称
            $table->string('company_type', 50)->nullable(); // 公司类型：private, public, foreign, government
            $table->string('company_industry', 100)->nullable(); // 公司行业
            $table->string('company_size', 20)->nullable(); // 公司规模：startup, small, medium, large
            $table->text('company_description')->nullable(); // 公司描述

            // 职位信息
            $table->string('position_title', 200); // 职位名称
            $table->string('position_level', 50)->nullable(); // 职位等级
            $table->string('department', 100)->nullable(); // 部门
            $table->text('job_responsibilities')->nullable(); // 工作职责
            $table->text('job_achievements')->nullable(); // 工作成就

            // 工作性质
            $table->string('employment_type', 20); // 工作类型：full_time, part_time, contract, freelance, internship
            $table->boolean('is_remote')->default(false); // 是否远程工作
            $table->string('work_location', 100)->nullable(); // 工作地点

            // 时间信息
            $table->date('start_date'); // 开始日期
            $table->date('end_date')->nullable(); // 结束日期
            $table->boolean('is_current')->default(false); // 是否当前工作
            $table->integer('work_years')->nullable(); // 工作年限（月）
            $table->string('reason_for_leaving', 200)->nullable(); // 离职原因

            // 薪资信息
            $table->decimal('salary', 10, 2)->nullable(); // 月薪
            $table->string('salary_currency', 10)->default('CNY'); // 货币类型
            $table->string('salary_type', 20)->nullable(); // 薪资类型：monthly, annual, hourly
            $table->json('benefits')->nullable(); // 福利待遇（JSON格式）

            // 汇报关系
            $table->string('reporting_to', 100)->nullable(); // 汇报对象
            $table->integer('team_size')->nullable(); // 团队规模
            $table->boolean('has_direct_reports')->default(false); // 是否有直接下属

            // 技能与技术
            $table->json('skills_used')->nullable(); // 使用技能
            $table->json('technologies_used')->nullable(); // 使用技术
            $table->text('tools_used')->nullable(); // 使用工具

            // 绩效信息
            $table->string('performance_rating', 20)->nullable(); // 绩效评级
            $table->text('performance_comments')->nullable(); // 绩效评价

            // 推荐人信息
            $table->string('reference_name', 100)->nullable(); // 推荐人姓名
            $table->string('reference_position', 100)->nullable(); // 推荐人职位
            $table->string('reference_contact', 50)->nullable(); // 推荐人联系方式
            $table->text('reference_comments')->nullable(); // 推荐人评价

            // 验证信息
            $table->boolean('is_verified')->default(false); // 是否验证
            $table->string('verified_by', 100)->nullable(); // 验证人
            $table->date('verified_at')->nullable(); // 验证时间

            // 附件信息
            $table->json('attachments')->nullable(); // 相关附件

            // 状态和排序
            $table->boolean('is_active')->default(true); // 是否有效
            $table->integer('sort_order')->default(0); // 排序

            // 索引
            $table->index(['employee_id']);
            $table->index(['company_name']);
            $table->index(['start_date']);
            $table->index(['end_date']);
            $table->index(['employment_type']);
            $table->index(['is_verified']);
            $table->index(['is_active']);

            // 外键约束
            $table->foreign('employee_id')->references('id')->on('employees')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('external_experiences');
    }
};
